package rollmaterial;

import java.util.List;

import com.jme3.math.Vector3f;

import strecke.GleisElement;

public class Zug {
	
	protected List<Fahrzeug> fahrzeuge;
	
	protected String zugnummer;
	
	public boolean stop = false;
	
	//Positionsdaten
	GleisElement aktuellesElement;
	protected float position;
	
	protected float beschleunigung;
	protected float bremsbeschleunigung;
	protected float hoechstgeschwindigkeit;
	protected float geschwindigkeit;

	public Zug(GleisElement pos, String zugnummer)
	{
		this.zugnummer = zugnummer;
		this.beschleunigung = 1.0f;
		this.geschwindigkeit = 0;
		this.hoechstgeschwindigkeit = 40;
		this.bremsbeschleunigung = 2.0f;
		this.position = 0.0f;
		this.aktuellesElement = pos;
	}
	
	public boolean isStopped()
	{
		return this.stop;
	}
	
	public void update(float time)
	{ 
		System.out.println("Zug update: "+time+"\nGeschwindigkeit: "+geschwindigkeit);
		if (!stop)
		{	
			if((this.geschwindigkeit < aktuellesElement.getHoechstgeschwindigkeit()) && (this.geschwindigkeit < this.hoechstgeschwindigkeit))
			{
				this.position += (this.beschleunigung / 2) * time * time + this.geschwindigkeit * time;
				
				this.geschwindigkeit += (this.beschleunigung * time);
				
				if(this.geschwindigkeit > this.hoechstgeschwindigkeit)
				{
					this.geschwindigkeit = this.hoechstgeschwindigkeit;
				}
				if(this.geschwindigkeit > aktuellesElement.getHoechstgeschwindigkeit())
				{
					this.geschwindigkeit = aktuellesElement.getHoechstgeschwindigkeit();
				}
				
			}
			else
			{
				this.position += (this.geschwindigkeit*time);
			}
			
			//bremscode einfuegen
			
			float gleislaenge = aktuellesElement.getLaenge();
			while(this.position > gleislaenge) // Weichen werden hier direkt übersprungen
			{
				if(this.aktuellesElement.getNext() != null)
				{
					this.aktuellesElement = aktuellesElement.getNext();
					this.position -= gleislaenge;
					gleislaenge = aktuellesElement.getLaenge();
				}
				else
				{
					stop = true;
					break;
				}
			}
		}
	}
	
	public Vector3f getPosition()
	{
		return aktuellesElement.getPosition(position);
	}
	
	public float getRotation()
	{
		return aktuellesElement.getWinkel(position);
	}
	
	@Override
	public String toString() {
		String result = "--- ZugDebug fuer " + zugnummer + " ---\n";
		result += "Aktuelles Gleiselement: " + aktuellesElement.getID() + "\n";
		result += "Position: " + this.position + "\n";
		result += "Geschwindigkeit: " + this.geschwindigkeit * 3.6 + "km/h\n\n";
		return result;
	}
	
}